libxl: add a get_shutdown_reason
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 30 Dec 2009 12:45:41 +0000 (12:45 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 30 Dec 2009 12:45:41 +0000 (12:45 +0000)
Signed-off-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
tools/libxl/libxl_dom.c
tools/libxl/libxl_internal.h

index e87697041355fcac954e74bc4252977c911369f0..ae93bd11ea580235bfc40782e9eefb46b97c8871 100644 (file)
@@ -42,6 +42,21 @@ int is_hvm(struct libxl_ctx *ctx, uint32_t domid)
     return !!(info.flags & XEN_DOMINF_hvm_guest);
 }
 
+int get_shutdown_reason(struct libxl_ctx *ctx, uint32_t domid)
+{
+    xc_domaininfo_t info;
+    int ret;
+
+    ret = xc_domain_getinfolist(ctx->xch, domid, 1, &info);
+    if (ret != 1)
+        return -1;
+    if (info.domain != domid)
+        return -1;
+    if (!(info.flags & XEN_DOMINF_shutdown))
+        return -1;
+    return dominfo_get_shutdown_reason(&info);
+}
+
 int build_pre(struct libxl_ctx *ctx, uint32_t domid,
               libxl_domain_build_info *info, libxl_domain_build_state *state)
 {
index 3519eacefd2d1c4c7e14f683a2b831c25d010594..294d7a7cfc7f67ebaf0ce7ecc3459c47ded64179 100644 (file)
@@ -124,6 +124,9 @@ char **libxl_xs_directory(struct libxl_ctx *ctx, xs_transaction_t t, char *path,
 
 /* from xl_dom */
 int is_hvm(struct libxl_ctx *ctx, uint32_t domid);
+int get_shutdown_reason(struct libxl_ctx *ctx, uint32_t domid);
+#define dominfo_get_shutdown_reason(info) (((info)->flags >> XEN_DOMINF_shutdownshift) & XEN_DOMINF_shutdownmask)
+
 int build_pre(struct libxl_ctx *ctx, uint32_t domid,
               libxl_domain_build_info *info, libxl_domain_build_state *state);
 int build_post(struct libxl_ctx *ctx, uint32_t domid,